require "import"
import "android.content.Context"
import "android.content.Intent"
import "java.util.Locale"
import "android.speech.SpeechRecognizer"
import "android.speech.RecognitionListener"
import "android.speech.RecognizerIntent"

function destroy(recognizer)
  if recognizer then
    recognizer.destroy()
    recognizer = nil
  end
  return true
end

function startSpeech(language)
  local speech = SpeechRecognizer.createSpeechRecognizer(this)
  local listener = RecognitionListener {
    onResults = function(results)
      local resultArray = results.getParcelableArrayList(SpeechRecognizer.RESULTS_RECOGNITION)
      if resultArray ~= nil and resultArray.size() > 0 then
        local spokenText = resultArray.get(0)
        local editText = service.getEditText()
        service.insertText(editText, spokenText .. "")
        service.speak(spokenText)
      end
      destroy(speech)
    end,
    onError = function()
      destroy(speech)
      return false
    end
  }

  local intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)
  intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
  if language == "en" then
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.ENGLISH)
  else
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "hi-IN")
  end
  intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, this.getPackageName())
  speech.setRecognitionListener(listener)
  speech.startListening(intent)
  return true
end

function detectLanguage()
  -- Placeholder for language detection logic
  -- For now, we'll just switch between "en" and "hi-IN"
  local currentLocale = Locale.getDefault().getLanguage()
  if currentLocale == "hi" then
    startSpeech("hi")
  else
    startSpeech("en")
  end
end

detectLanguage()